Download UMAP.
scp schea2@hpc3.rcic.uci.edu:/share/crsp/lab/alcalof/schea2/20220414-seurat/umap-by-embryo-all-aggr.Robj .
Load libraries.
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
[30m── [1mAttaching packages[22m ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.1 ──[39m
[30m[32m✔[30m [34mggplot2[30m 3.3.6 [32m✔[30m [34mpurrr [30m 0.3.4
[32m✔[30m [34mtibble [30m 3.1.7 [32m✔[30m [34mdplyr [30m 1.0.9
[32m✔[30m [34mtidyr [30m 1.2.0 [32m✔[30m [34mstringr[30m 1.4.0
[32m✔[30m [34mreadr [30m 2.1.1 [32m✔[30m [34mforcats[30m 0.5.1[39m
[30m── [1mConflicts[22m ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
[31m✖[30m [34mdplyr[30m::[32mfilter()[30m masks [34mstats[30m::filter()
[31m✖[30m [34mdplyr[30m::[32mlag()[30m masks [34mstats[30m::lag()[39m
Warning message:
R graphics engine version 14 is not supported by this version of RStudio. The Plots tab will be disabled until a newer version of RStudio is installed.
library(scales)
Attaching package: ‘scales’
The following object is masked from ‘package:purrr’:
discard
The following object is masked from ‘package:readr’:
col_factor
Load UMAP.
load("/Volumes/all_ssd/20220414-seurat/umap-by-embryo-all-aggr.Robj")
Plot UMAP by stage.
stage.umap <- ggplot() +
geom_point(data = sample(whole.umap), mapping = aes(x = umap.1, y = umap.2, color = stage), shape = 20, stroke = 0, size = 0.5) +
labs(x = "UMAP 1", y = "UMAP 2", color = "Stage") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"))
stage.umap
ggsave(plot = stage.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-by-stage-all-aggr.png", device = "png", width = 3.25, height = 2.25)

Plot UMAP by genotype.
stage.umap <- ggplot() +
geom_point(data = whole.umap, mapping = aes(x = umap.1, y = umap.2, color = stage), shape = 20, stroke = 0, size = 0.5) +
facet_wrap(~stage, nrow = 1) +
labs(x = "UMAP 1", y = "UMAP 2", color = "Genotype") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"), strip.background = element_blank())
stage.umap
ggsave(plot = stage.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-facet-stage-all-aggr.png", device = "png", width = 6.5, height = 2.25)

Plot UMAP by genotype.
genotype.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "LB")), mapping = aes(x = umap.1, y = umap.2, color = genotype), shape = 20, stroke = 0, size = 0.5) +
scale_color_manual(values = c("royalblue", "indianred")) +
labs(title = "Late Bud", x = "UMAP 1", y = "UMAP 2", color = "Genotype") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"))
genotype.umap
ggsave(plot = genotype.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-by-genotype-late-bud-all-aggr.png", device = "png", width = 3.25, height = 2.25)

Plot UMAP by genotype.
genotype.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "LB")), mapping = aes(x = umap.1, y = umap.2, color = genotype), shape = 20, stroke = 0, size = 0.5) +
facet_wrap(~genotype, nrow = 1) +
scale_color_manual(values = c("royalblue", "indianred")) +
labs(title = "Late Bud", x = "UMAP 1", y = "UMAP 2", color = "Genotype") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"), strip.background = element_blank())
genotype.umap
ggsave(plot = genotype.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-facet-genotype-late-bud-all-aggr.png", device = "png", width = 6.5, height = 2.25)

Plot UMAP by embryo.
embryo.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "LB") %>% filter(genotype == "Nipbl Flox/+")), mapping = aes(x = umap.1, y = umap.2, color = embryo), shape = 20, stroke = 0, size = 0.5) +
scale_color_manual(values = hue_pal()(28)[c(1, 15, 3, 17, 5)]) +
labs(title = "Nipbl Flox/+, Late Bud", x = "UMAP 1", y = "UMAP 2", color = "Embryo") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"))
embryo.umap
ggsave(plot = embryo.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-by-embryo-flox-late-bud-all-aggr.png", device = "png", width = 3.25, height = 2.25)

Plot UMAP by embryo.
embryo.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "LB") %>% filter(genotype == "Nipbl Flox/+")), mapping = aes(x = umap.1, y = umap.2, color = embryo), shape = 20, stroke = 0, size = 0.5) +
facet_wrap(~embryo, ncol = 4) +
scale_color_manual(values = hue_pal()(28)[c(1, 15, 3, 17, 5)]) +
labs(title = "Nipbl Flox/+, Late Bud", x = "UMAP 1", y = "UMAP 2", color = "Embryo") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"), strip.background = element_blank())
embryo.umap
ggsave(plot = embryo.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-facet-embryo-flox-late-bud-all-aggr.png", device = "png", width = 6.5, height = 3.6)

Plot UMAP by embryo.
embryo.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "LB") %>% filter(genotype == "Nipbl FIN/+")), mapping = aes(x = umap.1, y = umap.2, color = embryo), shape = 20, stroke = 0, size = 0.5) +
scale_color_manual(values = hue_pal()(28)[c(19, 7, 21, 9, 23, 11)]) +
labs(title = "Nipbl FIN/+, Late Bud", x = "UMAP 1", y = "UMAP 2", color = "Embryo") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"))
embryo.umap
ggsave(plot = embryo.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-by-embryo-fin-late-bud-all-aggr.png", device = "png", width = 3.25, height = 2.25)

Plot UMAP by embryo.
embryo.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "LB") %>% filter(genotype == "Nipbl FIN/+")), mapping = aes(x = umap.1, y = umap.2, color = embryo), shape = 20, stroke = 0, size = 0.5) +
facet_wrap(~embryo, ncol = 4) +
scale_color_manual(values = hue_pal()(28)[c(19, 7, 21, 9, 23, 11)]) +
labs(title = "Nipbl FIN/+, Late Bud", x = "UMAP 1", y = "UMAP 2", color = "Embryo") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"), strip.background = element_blank())
embryo.umap
ggsave(plot = embryo.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-facet-embryo-fin-late-bud-all-aggr.png", device = "png", width = 6.5, height = 3.6)

Plot UMAP by genotype.
genotype.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "CC")), mapping = aes(x = umap.1, y = umap.2, color = genotype), shape = 20, stroke = 0, size = 0.5) +
scale_color_manual(values = c("royalblue", "indianred")) +
labs(title = "Cardiac Crescent", x = "UMAP 1", y = "UMAP 2", color = "Genotype") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"))
genotype.umap
ggsave(plot = genotype.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-by-genotype-cardiac-crescent-all-aggr.png", device = "png", width = 3.25, height = 2.25)

Plot UMAP by genotype.
genotype.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "CC")), mapping = aes(x = umap.1, y = umap.2, color = genotype), shape = 20, stroke = 0, size = 0.5) +
facet_wrap(~genotype, ncol = 2) +
scale_color_manual(values = c("royalblue", "indianred")) +
labs(title = "Cardiac Crescent", x = "UMAP 1", y = "UMAP 2", color = "Genotype") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"), strip.background = element_blank())
genotype.umap
ggsave(plot = genotype.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-facet-genotype-cardiac-crescent-all-aggr.png", device = "png", width = 6.5, height = 2.25)

Plot UMAP by embryo.
embryo.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "CC") %>% filter(genotype == "Nipbl Flox/+")), mapping = aes(x = umap.1, y = umap.2, color = embryo), shape = 20, stroke = 0, size = 0.5) +
scale_color_manual(values = hue_pal()(28)[c(25, 13, 27, 2, 16, 4, 18, 6)]) +
labs(title = "Nipbl Flox/+, Cardiac Crescent", x = "UMAP 1", y = "UMAP 2", color = "Embryo") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"))
embryo.umap
ggsave(plot = embryo.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-by-embryo-flox-cardiac-crescent-all-aggr.png", device = "png", width = 3.25, height = 2.25)

Plot UMAP by embryo.
embryo.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "CC") %>% filter(genotype == "Nipbl Flox/+")), mapping = aes(x = umap.1, y = umap.2, color = embryo), shape = 20, stroke = 0, size = 0.5) +
facet_wrap(~embryo, ncol = 4) +
scale_color_manual(values = hue_pal()(28)[c(25, 13, 27, 2, 16, 4, 18, 6)]) +
labs(title = "Nipbl Flox/+, Cardiac Crescent", x = "UMAP 1", y = "UMAP 2", color = "Embryo") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"), strip.background = element_blank())
embryo.umap
ggsave(plot = embryo.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-facet-embryo-flox-cardiac-crescent-all-aggr.png", device = "png", width = 6.5, height = 3.6)

Plot UMAP by embryo.
embryo.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "CC") %>% filter(genotype == "Nipbl FIN/+")), mapping = aes(x = umap.1, y = umap.2, color = embryo), shape = 20, stroke = 0, size = 0.5) +
scale_color_manual(values = hue_pal()(28)[c(20, 8, 22, 10, 24, 12, 26, 14)]) +
labs(title = "Nipbl FIN/+, Cardiac Crescent", x = "UMAP 1", y = "UMAP 2", color = "Embryo") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"))
embryo.umap
ggsave(plot = embryo.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-by-embryo-fin-cardiac-crescent-all-aggr.png", device = "png", width = 3.25, height = 2.25)

Plot UMAP by embryo.
embryo.umap <- ggplot() +
geom_point(data = sample(whole.umap %>% filter(stage == "CC") %>% filter(genotype == "Nipbl FIN/+")), mapping = aes(x = umap.1, y = umap.2, color = embryo), shape = 20, stroke = 0, size = 0.5) +
facet_wrap(~embryo, ncol = 4) +
scale_color_manual(values = hue_pal()(28)[c(20, 8, 22, 10, 24, 12, 26, 14)]) +
labs(title = "Nipbl FIN/+, Cardiac Crescent", x = "UMAP 1", y = "UMAP 2", color = "Embryo") +
guides(color = guide_legend(override.aes = list(size=2.3))) +
theme_classic(base_size = 7) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text = element_blank(), plot.title = element_text(hjust = 0.5), legend.key.size = unit(7, "pt"), strip.background = element_blank())
embryo.umap
ggsave(plot = embryo.umap, filename = "/Volumes/all_ssd/20220414-seurat/umap-facet-embryo-fin-cardiac-crescent-all-aggr.png", device = "png", width = 6.5, height = 3.6)

LS0tCnRpdGxlOiAiUGxvdCBVTUFQIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpEb3dubG9hZCBVTUFQLgpgYGB7YmFzaH0Kc2NwIHNjaGVhMkBocGMzLnJjaWMudWNpLmVkdTovc2hhcmUvY3JzcC9sYWIvYWxjYWxvZi9zY2hlYTIvMjAyMjA0MTQtc2V1cmF0L3VtYXAtYnktZW1icnlvLWFsbC1hZ2dyLlJvYmogLgpgYGAKCkxvYWQgbGlicmFyaWVzLgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoc2NhbGVzKQpgYGAKCkxvYWQgVU1BUC4KYGBge3J9CmxvYWQoIi9Wb2x1bWVzL2FsbF9zc2QvMjAyMjA0MTQtc2V1cmF0L3VtYXAtYnktZW1icnlvLWFsbC1hZ2dyLlJvYmoiKQpgYGAKClBsb3QgVU1BUCBieSBzdGFnZS4KYGBge3J9CnN0YWdlLnVtYXAgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9pbnQoZGF0YSA9IHNhbXBsZSh3aG9sZS51bWFwKSwgbWFwcGluZyA9IGFlcyh4ID0gdW1hcC4xLCB5ID0gdW1hcC4yLCBjb2xvciA9IHN0YWdlKSwgc2hhcGUgPSAyMCwgc3Ryb2tlID0gMCwgc2l6ZSA9IDAuNSkgKwogIGxhYnMoeCA9ICJVTUFQIDEiLCB5ID0gIlVNQVAgMiIsIGNvbG9yID0gIlN0YWdlIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemU9Mi4zKSkpICsKICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDcpICsKICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoNywgInB0IikpCgpzdGFnZS51bWFwCgpnZ3NhdmUocGxvdCA9IHN0YWdlLnVtYXAsIGZpbGVuYW1lID0gIi9Wb2x1bWVzL2FsbF9zc2QvMjAyMjA0MTQtc2V1cmF0L3VtYXAtYnktc3RhZ2UtYWxsLWFnZ3IucG5nIiwgZGV2aWNlID0gInBuZyIsIHdpZHRoID0gMy4yNSwgaGVpZ2h0ID0gMi4yNSkKYGBgCgpQbG90IFVNQVAgYnkgZ2Vub3R5cGUuCmBgYHtyfQpzdGFnZS51bWFwIDwtIGdncGxvdCgpICsKICBnZW9tX3BvaW50KGRhdGEgPSB3aG9sZS51bWFwLCBtYXBwaW5nID0gYWVzKHggPSB1bWFwLjEsIHkgPSB1bWFwLjIsIGNvbG9yID0gc3RhZ2UpLCBzaGFwZSA9IDIwLCBzdHJva2UgPSAwLCBzaXplID0gMC41KSArCiAgZmFjZXRfd3JhcCh+c3RhZ2UsIG5yb3cgPSAxKSArCiAgbGFicyh4ID0gIlVNQVAgMSIsIHkgPSAiVU1BUCAyIiwgY29sb3IgPSAiR2Vub3R5cGUiKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3Qoc2l6ZT0yLjMpKSkgKwogIHRoZW1lX2NsYXNzaWMoYmFzZV9zaXplID0gNykgKwogIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgbGVnZW5kLmtleS5zaXplID0gdW5pdCg3LCAicHQiKSwgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSkKCnN0YWdlLnVtYXAKCmdnc2F2ZShwbG90ID0gc3RhZ2UudW1hcCwgZmlsZW5hbWUgPSAiL1ZvbHVtZXMvYWxsX3NzZC8yMDIyMDQxNC1zZXVyYXQvdW1hcC1mYWNldC1zdGFnZS1hbGwtYWdnci5wbmciLCBkZXZpY2UgPSAicG5nIiwgd2lkdGggPSA2LjUsIGhlaWdodCA9IDIuMjUpCmBgYAoKUGxvdCBVTUFQIGJ5IGdlbm90eXBlLgpgYGB7cn0KZ2Vub3R5cGUudW1hcCA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2ludChkYXRhID0gc2FtcGxlKHdob2xlLnVtYXAgJT4lIGZpbHRlcihzdGFnZSA9PSAiTEIiKSksIG1hcHBpbmcgPSBhZXMoeCA9IHVtYXAuMSwgeSA9IHVtYXAuMiwgY29sb3IgPSBnZW5vdHlwZSksIHNoYXBlID0gMjAsIHN0cm9rZSA9IDAsIHNpemUgPSAwLjUpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygicm95YWxibHVlIiwgImluZGlhbnJlZCIpKSArCiAgbGFicyh0aXRsZSA9ICJMYXRlIEJ1ZCIsIHggPSAiVU1BUCAxIiwgeSA9ICJVTUFQIDIiLCBjb2xvciA9ICJHZW5vdHlwZSIpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChzaXplPTIuMykpKSArCiAgdGhlbWVfY2xhc3NpYyhiYXNlX3NpemUgPSA3KSArCiAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCBsZWdlbmQua2V5LnNpemUgPSB1bml0KDcsICJwdCIpKQoKZ2Vub3R5cGUudW1hcAoKZ2dzYXZlKHBsb3QgPSBnZW5vdHlwZS51bWFwLCBmaWxlbmFtZSA9ICIvVm9sdW1lcy9hbGxfc3NkLzIwMjIwNDE0LXNldXJhdC91bWFwLWJ5LWdlbm90eXBlLWxhdGUtYnVkLWFsbC1hZ2dyLnBuZyIsIGRldmljZSA9ICJwbmciLCB3aWR0aCA9IDMuMjUsIGhlaWdodCA9IDIuMjUpCmBgYAoKUGxvdCBVTUFQIGJ5IGdlbm90eXBlLgpgYGB7cn0KZ2Vub3R5cGUudW1hcCA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2ludChkYXRhID0gc2FtcGxlKHdob2xlLnVtYXAgJT4lIGZpbHRlcihzdGFnZSA9PSAiTEIiKSksIG1hcHBpbmcgPSBhZXMoeCA9IHVtYXAuMSwgeSA9IHVtYXAuMiwgY29sb3IgPSBnZW5vdHlwZSksIHNoYXBlID0gMjAsIHN0cm9rZSA9IDAsIHNpemUgPSAwLjUpICsKICBmYWNldF93cmFwKH5nZW5vdHlwZSwgbnJvdyA9IDEpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygicm95YWxibHVlIiwgImluZGlhbnJlZCIpKSArCiAgbGFicyh0aXRsZSA9ICJMYXRlIEJ1ZCIsIHggPSAiVU1BUCAxIiwgeSA9ICJVTUFQIDIiLCBjb2xvciA9ICJHZW5vdHlwZSIpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChzaXplPTIuMykpKSArCiAgdGhlbWVfY2xhc3NpYyhiYXNlX3NpemUgPSA3KSArCiAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCBsZWdlbmQua2V5LnNpemUgPSB1bml0KDcsICJwdCIpLCBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpKQoKZ2Vub3R5cGUudW1hcAoKZ2dzYXZlKHBsb3QgPSBnZW5vdHlwZS51bWFwLCBmaWxlbmFtZSA9ICIvVm9sdW1lcy9hbGxfc3NkLzIwMjIwNDE0LXNldXJhdC91bWFwLWZhY2V0LWdlbm90eXBlLWxhdGUtYnVkLWFsbC1hZ2dyLnBuZyIsIGRldmljZSA9ICJwbmciLCB3aWR0aCA9IDYuNSwgaGVpZ2h0ID0gMi4yNSkKYGBgCgpQbG90IFVNQVAgYnkgZW1icnlvLgpgYGB7cn0KZW1icnlvLnVtYXAgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9pbnQoZGF0YSA9IHNhbXBsZSh3aG9sZS51bWFwICU+JSBmaWx0ZXIoc3RhZ2UgPT0gIkxCIikgJT4lIGZpbHRlcihnZW5vdHlwZSA9PSAiTmlwYmwgRmxveC8rIikpLCBtYXBwaW5nID0gYWVzKHggPSB1bWFwLjEsIHkgPSB1bWFwLjIsIGNvbG9yID0gZW1icnlvKSwgc2hhcGUgPSAyMCwgc3Ryb2tlID0gMCwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBodWVfcGFsKCkoMjgpW2MoMSwgMTUsIDMsIDE3LCA1KV0pICsKICBsYWJzKHRpdGxlID0gIk5pcGJsIEZsb3gvKywgTGF0ZSBCdWQiLCB4ID0gIlVNQVAgMSIsIHkgPSAiVU1BUCAyIiwgY29sb3IgPSAiRW1icnlvIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemU9Mi4zKSkpICsKICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDcpICsKICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoNywgInB0IikpCgplbWJyeW8udW1hcAoKZ2dzYXZlKHBsb3QgPSBlbWJyeW8udW1hcCwgZmlsZW5hbWUgPSAiL1ZvbHVtZXMvYWxsX3NzZC8yMDIyMDQxNC1zZXVyYXQvdW1hcC1ieS1lbWJyeW8tZmxveC1sYXRlLWJ1ZC1hbGwtYWdnci5wbmciLCBkZXZpY2UgPSAicG5nIiwgd2lkdGggPSAzLjI1LCBoZWlnaHQgPSAyLjI1KQpgYGAKClBsb3QgVU1BUCBieSBlbWJyeW8uCmBgYHtyfQplbWJyeW8udW1hcCA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2ludChkYXRhID0gc2FtcGxlKHdob2xlLnVtYXAgJT4lIGZpbHRlcihzdGFnZSA9PSAiTEIiKSAlPiUgZmlsdGVyKGdlbm90eXBlID09ICJOaXBibCBGbG94LysiKSksIG1hcHBpbmcgPSBhZXMoeCA9IHVtYXAuMSwgeSA9IHVtYXAuMiwgY29sb3IgPSBlbWJyeW8pLCBzaGFwZSA9IDIwLCBzdHJva2UgPSAwLCBzaXplID0gMC41KSArCiAgZmFjZXRfd3JhcCh+ZW1icnlvLCBuY29sID0gNCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBodWVfcGFsKCkoMjgpW2MoMSwgMTUsIDMsIDE3LCA1KV0pICsKICBsYWJzKHRpdGxlID0gIk5pcGJsIEZsb3gvKywgTGF0ZSBCdWQiLCB4ID0gIlVNQVAgMSIsIHkgPSAiVU1BUCAyIiwgY29sb3IgPSAiRW1icnlvIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemU9Mi4zKSkpICsKICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDcpICsKICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoNywgInB0IiksIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCkpCgplbWJyeW8udW1hcAoKZ2dzYXZlKHBsb3QgPSBlbWJyeW8udW1hcCwgZmlsZW5hbWUgPSAiL1ZvbHVtZXMvYWxsX3NzZC8yMDIyMDQxNC1zZXVyYXQvdW1hcC1mYWNldC1lbWJyeW8tZmxveC1sYXRlLWJ1ZC1hbGwtYWdnci5wbmciLCBkZXZpY2UgPSAicG5nIiwgd2lkdGggPSA2LjUsIGhlaWdodCA9IDMuNikKYGBgCgpQbG90IFVNQVAgYnkgZW1icnlvLgpgYGB7cn0KZW1icnlvLnVtYXAgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9pbnQoZGF0YSA9IHNhbXBsZSh3aG9sZS51bWFwICU+JSBmaWx0ZXIoc3RhZ2UgPT0gIkxCIikgJT4lIGZpbHRlcihnZW5vdHlwZSA9PSAiTmlwYmwgRklOLysiKSksIG1hcHBpbmcgPSBhZXMoeCA9IHVtYXAuMSwgeSA9IHVtYXAuMiwgY29sb3IgPSBlbWJyeW8pLCBzaGFwZSA9IDIwLCBzdHJva2UgPSAwLCBzaXplID0gMC41KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGh1ZV9wYWwoKSgyOClbYygxOSwgNywgMjEsIDksIDIzLCAxMSldKSArCiAgbGFicyh0aXRsZSA9ICJOaXBibCBGSU4vKywgTGF0ZSBCdWQiLCB4ID0gIlVNQVAgMSIsIHkgPSAiVU1BUCAyIiwgY29sb3IgPSAiRW1icnlvIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemU9Mi4zKSkpICsKICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDcpICsKICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoNywgInB0IikpCgplbWJyeW8udW1hcAoKZ2dzYXZlKHBsb3QgPSBlbWJyeW8udW1hcCwgZmlsZW5hbWUgPSAiL1ZvbHVtZXMvYWxsX3NzZC8yMDIyMDQxNC1zZXVyYXQvdW1hcC1ieS1lbWJyeW8tZmluLWxhdGUtYnVkLWFsbC1hZ2dyLnBuZyIsIGRldmljZSA9ICJwbmciLCB3aWR0aCA9IDMuMjUsIGhlaWdodCA9IDIuMjUpCmBgYAoKUGxvdCBVTUFQIGJ5IGVtYnJ5by4KYGBge3J9CmVtYnJ5by51bWFwIDwtIGdncGxvdCgpICsKICBnZW9tX3BvaW50KGRhdGEgPSBzYW1wbGUod2hvbGUudW1hcCAlPiUgZmlsdGVyKHN0YWdlID09ICJMQiIpICU+JSBmaWx0ZXIoZ2Vub3R5cGUgPT0gIk5pcGJsIEZJTi8rIikpLCBtYXBwaW5nID0gYWVzKHggPSB1bWFwLjEsIHkgPSB1bWFwLjIsIGNvbG9yID0gZW1icnlvKSwgc2hhcGUgPSAyMCwgc3Ryb2tlID0gMCwgc2l6ZSA9IDAuNSkgKwogIGZhY2V0X3dyYXAofmVtYnJ5bywgbmNvbCA9IDQpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gaHVlX3BhbCgpKDI4KVtjKDE5LCA3LCAyMSwgOSwgMjMsIDExKV0pICsKICBsYWJzKHRpdGxlID0gIk5pcGJsIEZJTi8rLCBMYXRlIEJ1ZCIsIHggPSAiVU1BUCAxIiwgeSA9ICJVTUFQIDIiLCBjb2xvciA9ICJFbWJyeW8iKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3Qoc2l6ZT0yLjMpKSkgKwogIHRoZW1lX2NsYXNzaWMoYmFzZV9zaXplID0gNykgKwogIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgbGVnZW5kLmtleS5zaXplID0gdW5pdCg3LCAicHQiKSwgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSkKCmVtYnJ5by51bWFwCgpnZ3NhdmUocGxvdCA9IGVtYnJ5by51bWFwLCBmaWxlbmFtZSA9ICIvVm9sdW1lcy9hbGxfc3NkLzIwMjIwNDE0LXNldXJhdC91bWFwLWZhY2V0LWVtYnJ5by1maW4tbGF0ZS1idWQtYWxsLWFnZ3IucG5nIiwgZGV2aWNlID0gInBuZyIsIHdpZHRoID0gNi41LCBoZWlnaHQgPSAzLjYpCmBgYAoKUGxvdCBVTUFQIGJ5IGdlbm90eXBlLgpgYGB7cn0KZ2Vub3R5cGUudW1hcCA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2ludChkYXRhID0gc2FtcGxlKHdob2xlLnVtYXAgJT4lIGZpbHRlcihzdGFnZSA9PSAiQ0MiKSksIG1hcHBpbmcgPSBhZXMoeCA9IHVtYXAuMSwgeSA9IHVtYXAuMiwgY29sb3IgPSBnZW5vdHlwZSksIHNoYXBlID0gMjAsIHN0cm9rZSA9IDAsIHNpemUgPSAwLjUpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygicm95YWxibHVlIiwgImluZGlhbnJlZCIpKSArCiAgbGFicyh0aXRsZSA9ICJDYXJkaWFjIENyZXNjZW50IiwgeCA9ICJVTUFQIDEiLCB5ID0gIlVNQVAgMiIsIGNvbG9yID0gIkdlbm90eXBlIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemU9Mi4zKSkpICsKICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDcpICsKICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoNywgInB0IikpCgpnZW5vdHlwZS51bWFwCgpnZ3NhdmUocGxvdCA9IGdlbm90eXBlLnVtYXAsIGZpbGVuYW1lID0gIi9Wb2x1bWVzL2FsbF9zc2QvMjAyMjA0MTQtc2V1cmF0L3VtYXAtYnktZ2Vub3R5cGUtY2FyZGlhYy1jcmVzY2VudC1hbGwtYWdnci5wbmciLCBkZXZpY2UgPSAicG5nIiwgd2lkdGggPSAzLjI1LCBoZWlnaHQgPSAyLjI1KQpgYGAKClBsb3QgVU1BUCBieSBnZW5vdHlwZS4KYGBge3J9Cmdlbm90eXBlLnVtYXAgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9pbnQoZGF0YSA9IHNhbXBsZSh3aG9sZS51bWFwICU+JSBmaWx0ZXIoc3RhZ2UgPT0gIkNDIikpLCBtYXBwaW5nID0gYWVzKHggPSB1bWFwLjEsIHkgPSB1bWFwLjIsIGNvbG9yID0gZ2Vub3R5cGUpLCBzaGFwZSA9IDIwLCBzdHJva2UgPSAwLCBzaXplID0gMC41KSArCiAgZmFjZXRfd3JhcCh+Z2Vub3R5cGUsIG5jb2wgPSAyKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInJveWFsYmx1ZSIsICJpbmRpYW5yZWQiKSkgKwogIGxhYnModGl0bGUgPSAiQ2FyZGlhYyBDcmVzY2VudCIsIHggPSAiVU1BUCAxIiwgeSA9ICJVTUFQIDIiLCBjb2xvciA9ICJHZW5vdHlwZSIpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChzaXplPTIuMykpKSArCiAgdGhlbWVfY2xhc3NpYyhiYXNlX3NpemUgPSA3KSArCiAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCBsZWdlbmQua2V5LnNpemUgPSB1bml0KDcsICJwdCIpLCBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpKQoKZ2Vub3R5cGUudW1hcAoKZ2dzYXZlKHBsb3QgPSBnZW5vdHlwZS51bWFwLCBmaWxlbmFtZSA9ICIvVm9sdW1lcy9hbGxfc3NkLzIwMjIwNDE0LXNldXJhdC91bWFwLWZhY2V0LWdlbm90eXBlLWNhcmRpYWMtY3Jlc2NlbnQtYWxsLWFnZ3IucG5nIiwgZGV2aWNlID0gInBuZyIsIHdpZHRoID0gNi41LCBoZWlnaHQgPSAyLjI1KQpgYGAKClBsb3QgVU1BUCBieSBlbWJyeW8uCmBgYHtyfQplbWJyeW8udW1hcCA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2ludChkYXRhID0gc2FtcGxlKHdob2xlLnVtYXAgJT4lIGZpbHRlcihzdGFnZSA9PSAiQ0MiKSAlPiUgZmlsdGVyKGdlbm90eXBlID09ICJOaXBibCBGbG94LysiKSksIG1hcHBpbmcgPSBhZXMoeCA9IHVtYXAuMSwgeSA9IHVtYXAuMiwgY29sb3IgPSBlbWJyeW8pLCBzaGFwZSA9IDIwLCBzdHJva2UgPSAwLCBzaXplID0gMC41KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGh1ZV9wYWwoKSgyOClbYygyNSwgMTMsIDI3LCAyLCAxNiwgNCwgMTgsIDYpXSkgKwogIGxhYnModGl0bGUgPSAiTmlwYmwgRmxveC8rLCBDYXJkaWFjIENyZXNjZW50IiwgeCA9ICJVTUFQIDEiLCB5ID0gIlVNQVAgMiIsIGNvbG9yID0gIkVtYnJ5byIpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChzaXplPTIuMykpKSArCiAgdGhlbWVfY2xhc3NpYyhiYXNlX3NpemUgPSA3KSArCiAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCBsZWdlbmQua2V5LnNpemUgPSB1bml0KDcsICJwdCIpKQoKZW1icnlvLnVtYXAKCmdnc2F2ZShwbG90ID0gZW1icnlvLnVtYXAsIGZpbGVuYW1lID0gIi9Wb2x1bWVzL2FsbF9zc2QvMjAyMjA0MTQtc2V1cmF0L3VtYXAtYnktZW1icnlvLWZsb3gtY2FyZGlhYy1jcmVzY2VudC1hbGwtYWdnci5wbmciLCBkZXZpY2UgPSAicG5nIiwgd2lkdGggPSAzLjI1LCBoZWlnaHQgPSAyLjI1KQpgYGAKClBsb3QgVU1BUCBieSBlbWJyeW8uCmBgYHtyfQplbWJyeW8udW1hcCA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2ludChkYXRhID0gc2FtcGxlKHdob2xlLnVtYXAgJT4lIGZpbHRlcihzdGFnZSA9PSAiQ0MiKSAlPiUgZmlsdGVyKGdlbm90eXBlID09ICJOaXBibCBGbG94LysiKSksIG1hcHBpbmcgPSBhZXMoeCA9IHVtYXAuMSwgeSA9IHVtYXAuMiwgY29sb3IgPSBlbWJyeW8pLCBzaGFwZSA9IDIwLCBzdHJva2UgPSAwLCBzaXplID0gMC41KSArCiAgZmFjZXRfd3JhcCh+ZW1icnlvLCBuY29sID0gNCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBodWVfcGFsKCkoMjgpW2MoMjUsIDEzLCAyNywgMiwgMTYsIDQsIDE4LCA2KV0pICsKICBsYWJzKHRpdGxlID0gIk5pcGJsIEZsb3gvKywgQ2FyZGlhYyBDcmVzY2VudCIsIHggPSAiVU1BUCAxIiwgeSA9ICJVTUFQIDIiLCBjb2xvciA9ICJFbWJyeW8iKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3Qoc2l6ZT0yLjMpKSkgKwogIHRoZW1lX2NsYXNzaWMoYmFzZV9zaXplID0gNykgKwogIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgbGVnZW5kLmtleS5zaXplID0gdW5pdCg3LCAicHQiKSwgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSkKCmVtYnJ5by51bWFwCgpnZ3NhdmUocGxvdCA9IGVtYnJ5by51bWFwLCBmaWxlbmFtZSA9ICIvVm9sdW1lcy9hbGxfc3NkLzIwMjIwNDE0LXNldXJhdC91bWFwLWZhY2V0LWVtYnJ5by1mbG94LWNhcmRpYWMtY3Jlc2NlbnQtYWxsLWFnZ3IucG5nIiwgZGV2aWNlID0gInBuZyIsIHdpZHRoID0gNi41LCBoZWlnaHQgPSAzLjYpCmBgYAoKUGxvdCBVTUFQIGJ5IGVtYnJ5by4KYGBge3J9CmVtYnJ5by51bWFwIDwtIGdncGxvdCgpICsKICBnZW9tX3BvaW50KGRhdGEgPSBzYW1wbGUod2hvbGUudW1hcCAlPiUgZmlsdGVyKHN0YWdlID09ICJDQyIpICU+JSBmaWx0ZXIoZ2Vub3R5cGUgPT0gIk5pcGJsIEZJTi8rIikpLCBtYXBwaW5nID0gYWVzKHggPSB1bWFwLjEsIHkgPSB1bWFwLjIsIGNvbG9yID0gZW1icnlvKSwgc2hhcGUgPSAyMCwgc3Ryb2tlID0gMCwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBodWVfcGFsKCkoMjgpW2MoMjAsIDgsIDIyLCAxMCwgMjQsIDEyLCAyNiwgMTQpXSkgKwogIGxhYnModGl0bGUgPSAiTmlwYmwgRklOLyssIENhcmRpYWMgQ3Jlc2NlbnQiLCB4ID0gIlVNQVAgMSIsIHkgPSAiVU1BUCAyIiwgY29sb3IgPSAiRW1icnlvIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemU9Mi4zKSkpICsKICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDcpICsKICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoNywgInB0IikpCgplbWJyeW8udW1hcAoKZ2dzYXZlKHBsb3QgPSBlbWJyeW8udW1hcCwgZmlsZW5hbWUgPSAiL1ZvbHVtZXMvYWxsX3NzZC8yMDIyMDQxNC1zZXVyYXQvdW1hcC1ieS1lbWJyeW8tZmluLWNhcmRpYWMtY3Jlc2NlbnQtYWxsLWFnZ3IucG5nIiwgZGV2aWNlID0gInBuZyIsIHdpZHRoID0gMy4yNSwgaGVpZ2h0ID0gMi4yNSkKYGBgCgpQbG90IFVNQVAgYnkgZW1icnlvLgpgYGB7cn0KZW1icnlvLnVtYXAgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9pbnQoZGF0YSA9IHNhbXBsZSh3aG9sZS51bWFwICU+JSBmaWx0ZXIoc3RhZ2UgPT0gIkNDIikgJT4lIGZpbHRlcihnZW5vdHlwZSA9PSAiTmlwYmwgRklOLysiKSksIG1hcHBpbmcgPSBhZXMoeCA9IHVtYXAuMSwgeSA9IHVtYXAuMiwgY29sb3IgPSBlbWJyeW8pLCBzaGFwZSA9IDIwLCBzdHJva2UgPSAwLCBzaXplID0gMC41KSArCiAgZmFjZXRfd3JhcCh+ZW1icnlvLCBuY29sID0gNCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBodWVfcGFsKCkoMjgpW2MoMjAsIDgsIDIyLCAxMCwgMjQsIDEyLCAyNiwgMTQpXSkgKwogIGxhYnModGl0bGUgPSAiTmlwYmwgRklOLyssIENhcmRpYWMgQ3Jlc2NlbnQiLCB4ID0gIlVNQVAgMSIsIHkgPSAiVU1BUCAyIiwgY29sb3IgPSAiRW1icnlvIikgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemU9Mi4zKSkpICsKICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDcpICsKICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoNywgInB0IiksIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCkpCgplbWJyeW8udW1hcAoKZ2dzYXZlKHBsb3QgPSBlbWJyeW8udW1hcCwgZmlsZW5hbWUgPSAiL1ZvbHVtZXMvYWxsX3NzZC8yMDIyMDQxNC1zZXVyYXQvdW1hcC1mYWNldC1lbWJyeW8tZmluLWNhcmRpYWMtY3Jlc2NlbnQtYWxsLWFnZ3IucG5nIiwgZGV2aWNlID0gInBuZyIsIHdpZHRoID0gNi41LCBoZWlnaHQgPSAzLjYpCmBgYA==